package com.mirama.framework.rabbitmq;


import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;

@Configuration
public class RabbitMqConfig {


    /**
     * 注册 DIRECT 的队列
     *
     * @return 队列
     */
    @Bean
    public Queue createDirectQueue() {
        return QueueBuilder
                .durable(MqConstants.MQ_DIRECT_QUEUE)// 持久化队列
//                .nonDurable(MqConstants.DEFAULT_MQ_QUEUE_NAME) // 非持久化队列，如果断开链接，队列中的数据会丢失
//                .exclusive() // 排他队列，只对首次声明它的连接（Connection）可见，会在其连接断开的时候自动删除。
//                .autoDelete() // 断开链接，自动删除队列，数据也会丢失
                .build();
    }


    /**
     * 注册 DIRECT 的交换机
     *
     * @return 交换机
     */
    @Bean
    public DirectExchange createDirectExchange() {
        Map<String, Object> headerMap = new HashMap<>();
        DirectExchange directExchange = ExchangeBuilder
                .directExchange(MqConstants.MQ_DIRECT_EXCHANGE)
                .durable(true)// 是否持久化
//                .autoDelete()// 自动删除，当断开连接的时候，会自动删除当前Exchange
                .withArguments(headerMap)
                .build();
        return directExchange;
    }

    /**
     * 将队列绑定到交换机上，并设置消息分发的路由键
     */
    @Bean
    public Binding bindingDirect() {
        return BindingBuilder
                .bind(createDirectQueue())
                .to(createDirectExchange())
                .with(MqConstants.MQ_DIRECT_ROUTINGKEY);
    }

}